﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AudiPyme.DAL
{
    public class PesoSectorTipoEmpresaFactory
    {
        //Calcula el peso del parámetro sector-tipo empresa de una empresa dada según el número de asalariados de la misma
        public static double PesoEmpresaSectorTipoEmpresa(int Sector, int TipoEmpresa, int NumeroAsalariados)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            IQueryable<double> PesoEmpresa = from p in agenteBD.PesoSectorTipoEmpresaEstablecer
                                             where p.IdSector == Sector && p.IdTipoEmpresa == TipoEmpresa
                                             select p.Peso;
            if (PesoEmpresa.Count() == 0)
            {
                return -1.0;
            }
            else
            {
                double xa = -1.0, xb = -1.0, x = -1.0, ya = -1.0, yb = -1.0, y = -1.0;
                //yb, valor máximo del peso del sector donde se ubique
                yb = PesoEmpresa.First();
                x = NumeroAsalariados;
                //ya, depende del valor de tipo de empresa.
                switch (TipoEmpresa)
                {
                    //Si es MicroEmpresa su ya o límite inferior es siempre 0
                    case 1:
                        ya = 0.0;
                        xa = 0;
                        xb = 9;
                        break;
                    //Si es una Pequeña Empresa su 'ya' o límite inferior es el máximo del peso para la Microempresa
                    case 2:
                        IQueryable<double> PesoMicro = from p in agenteBD.PesoSectorTipoEmpresaEstablecer
                                                       where p.IdSector == Sector && p.IdTipoEmpresa == 1
                                                       select p.Peso;
                        if (PesoMicro.Count() == 0)
                        {
                            return 0.0;
                        }
                        else
                        {
                            ya = PesoMicro.First();
                            xa = 10;
                            xb = 49;
                        }
                        break;
                    //Si es una Mediana Empresa su 'ya' o límite inferior es el máximo del peso para la Pequeña Empresa
                    case 3:
                        IQueryable<double> PesoPequenia = from p in agenteBD.PesoSectorTipoEmpresaEstablecer
                                                          where p.IdSector == Sector && p.IdTipoEmpresa == 1
                                                          select p.Peso;
                        if (PesoPequenia.Count() == 0)
                        {
                            return 0.0;
                        }
                        else
                        {
                            ya = PesoPequenia.First();
                            xa = 50;
                            xb = 249;
                        }
                        break;
                }
                //Falta recoger, el x, el xa y el xb y pasarlo a una fórmula que crearemos en un método pra calcular
                //el y
                y = EmpresasFactory.InterpolacionLineal(x, xa, xb, ya, yb);
                return y;
            }
        }

        //Método que sirve para actualizar el Peso Sector Tipo Empresa de la empresa que se pasa por parámetros
        public static void ActualizaPesoSectorTipoEmpresa(int EmpresaUsuario, double PesoSectTipEmp)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            IQueryable<Empresas> EmpresaQuery = from Emp in agenteBD.EmpresasEstablecer
                                                where Emp.IdEmpresa == EmpresaUsuario
                                                select Emp;
            if (EmpresaQuery.Count() != 0)
            {
                Empresas Empresa = EmpresaQuery.First();
                Empresa.PesoSector = PesoSectTipEmp;
                agenteBD.SaveChanges();
            }
        }
    }
}
